<template>
  <div id="table">
    <input type="file" ref="upFile" @change="importf()"/>
    <div id="demo"></div>
  </div>
</template>
<script>
import XLSX from 'xlsx'
export default {
  data () {
    return {
      wb: '', // 读取完成的数据
      rABS: false // 是否将文件读取为二进制字符串
    }
  },
  methods: {
    importf () { // 导入
      const obj = this.$refs.upFile
      console.log(obj)
      console.log('end')
      if (!obj.files) {
        return
      }
      var f = obj.files[0]
      console.log('文件名' + f.name)
      var reader = new FileReader()
      const _this = this
      reader.onload = function (e) {
        var data = e.target.result
        if (_this.rABS) {
          _this.wb = XLSX.read(btoa(_this.fixdata(data)), { // 手动转化
            type: 'base64'
          })
        } else {
          _this.wb = XLSX.read(data, {
            type: 'binary'
          })
        }
        // wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
        // wb.Sheets[Sheet名]获取第一个Sheet的数据
        // document.getElementById('demo').innerHTML = JSON.stringify(XLSX.utils.sheet_to_json(_this.wb.Sheets[_this.wb.SheetNames[0]]))
        console.log('文件内容')
        console.log(JSON.stringify(XLSX.utils.sheet_to_json(_this.wb.Sheets[_this.wb.SheetNames[0]])))
      }
      if (_this.rABS) {
        reader.readAsArrayBuffer(f)
      } else {
        reader.readAsBinaryString(f)
      }
    },

    fixdata (data) { // 文件流转BinaryString
      var o = ''
      var l = 0
      var w = 10240
      for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)))
      o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)))
      return o
    }
  }
}
</script>

<style lang="scss" scoped>

</style>
